MONITOR TS−2000 ――――――――――――――――――――――――――――――――――――――― I/O 1982年12月号掲載 MZ−2000 マシン語  ”TS−2000” 00000H−014FFH                (08000H−094FFH) 起動方法 IPLから起動 ――――――――――――――――――――――――――――――――――――――― シャープからMZ−2000が発売されて 何箇月かが過ぎようとしています。 MZ−2000はMZシリーズの最新作として7月から発売され、 その高性能とあいまってユーザーも着実に増えつつあるようです。 しかし、新機種としてまだ日が浅いため、 セールス・ポイントのカラーグラフィックを充分にサポートできず、 またユーザーが自分でなんとかしようにも 使い易い開発ツールがなく、 MZ−2000の高機能を活かしきれていないのが現状のようです。 そこで私達は今回から、MZ−2000用の開発ツールとして 『SUPER BASE』、 同じくカラー機能のサポートや高速処理のための『COLOR WICS』、 そして両システム・ソフトに共通の新モニタ 『MONITOR TS−2000』を発表していきたいと思います。 ★はじめに 各システム・ソフトについて、 連載の初めに簡単に説明しておきたいと思います。 ☆MONITOR TS−2000  キー入力、画面出力、プリンタ出力などの各種サブルーチン群と  メモリ・ダンプなどのモニタ・コマンドからなる新モニタです。 ☆SUPER BASE  BASE−80の社内バージョンとして  キャリー・ラボ開発室で使用中のBASEです。  グラフィックRAMをワーク・エリアに使うことによって  50Kバイト以上のソースをおくことができ、  そのアセンブルもハッシュ表を使うことにより  約1分しかかからないという高速さです。 ☆COLOR WICS  整数型インタープリタとコンパイラからなり、  MZ−2000のカラー機能を高速にサポートします。  その文法はBASICとほとんど同じであり、  初心者から上級者まで幅広く使えます。 ・=================・ ll MONITOR TS−2000 ll ・=================・ 今回はMZ−2000用の新モニタ、TS−2000を発表します。 ・―――――――――――――――――・ |++++++++++++特++++++徴++++++++++++| ・―――――――――――――――――・ ☆MONITOR TS-2000ではすべてのキャラクタをキーボードから入力できるようにしています。 ☆キー入力はすべてのキーにオート・リピートがきくようになっています。 ☆[SHIFT LOCK]キーにコントロール・キーの機能を持たせてあります。 ☆キー入力により、プリンタの出力を切り換えられます。 ☆キー入力によりファンクション・キーが定義できます。 ☆メモリ・ダンプ後はスクリーン・エディットでメモリ変更ができます。 ☆モニタ・コールはRST 5のみでできます。 ★キー入力時の注意 ■[GRPH]キーを入力した後(グラフィック・モード)  ・―――――――――――――――――――――――――――・  | [^]→■ [゛]→トーン [0]→● [1]→[CR]マーク |  | [HOME]→[H]   [CLR ]→[C]           |  ・―――――――――――――――――――――――――――・ ■グラフィック・モードで、[SHIFT ]を押したままで力ーソル・キーを入力。  ・―――――――――――――――――――――――――――・  | [→]→ → [←]→ ← [↑]→ ↑ [↓]→ ↓   |  ・―――――――――――――――――――――――――――・ 以下、のキャラクタがキー入力で画面に出力できるようになっています。 カーソルのキャラクタはノーマル・モードで“□” グラフ・モードで“■” カナ・モードで“●”です。 また、ファンクション・キーの定義方法ですが、 例をあげて説明したいと思います。 例:[F.10]にRUN[CR]マークと定義する。 (1)[SFT LOCK]キーを押したまま[F.10]を押すと、   [F.10]の内容がクリアされます。 (2)CRT上に“RUN[CR]マーク"とかき、カーソルを“R”のところ   まで戻します。 (3)[SHIFT ]を押しながら[F.10]を押していくと、   1文字ずつ[F.10]に定義されていきます。 (4)16文字までファンクション・キーに七義できます。 ・―――――――――――――――――・ |+++++++++++++コマンド+++++++++++++| ・―――――――――――――――――・ MONITOR TS−2000にはつぎのようなモニタ・コマンドがあります。 ・―――――――――――――――――――――――――――・ |Dコマンド:メモリの内容を表示(プリンタ出力も可)。 | |Jコマンド:任意のアドレスにコントロールを移す。   | |      プログラムの実行。            | |Sコマンド:メモリ内容をカセットにセーブする。    | |Lコマンド:メモリにカセットからロードする。     | |Vコマンド:カセットテープとメモリ内容を比較する。  | ・―――――――――――――――――――――――――――・ Dコマンド実行後のダンプはそのままスクリーン・エディットで変更できます。 ★モニタ・コマンドの機能と使い方 (1)Dコマンド(D:memory Dump)  機能:指定するメモリ・アドレスから16進出力とASCII 出力を行ないます。  ・――――――――――――――――・  |例 *D1200[CR]         |  ・――――――――――――――――・  1200番地より、メモリ・ダンプします。  [BREAK]でストップ。 (2)Sコマンド(S:Save)  機能::指定するメモリ・ブロックの内容をファイル・ネームを付けてカセットにセーブします。  ・――――――――――――――――・  |例 *S1200,1300,12A0,MON[CR]  |  ・――――――――――――――――・  この例は、$1200〜$1300のプログラムに  “MON”というファイル・ネームで  $12A0にオート・スタートするようにした例です。 (3)Lコマンド(L:Load)  機能:指定したファイル名のファイルをメモリにロードします。  ・――――――――――――――――・  |例 *LMON[CR]          |  ・――――――――――――――――・  この例は、“MON”というファイルをサーチしてロードします。  ファイル名を省略すると、最初に見つかったファイルをロードします。 (4)Vコマンド(V:Verify)  機能:指定したファイル名のベリファイします。  ・――――――――――――――――・  |例 *VMON[CR]          |  ・――――――――――――――――・  この例は“MON”というファイルをサーチしてベリファイします。  ファイル名を省略すると最初に見つかったファイルをベリファイします。 (5)Jコマンド(J:Jump)  機能:指定したアドレスにコントロールを移します。  ・――――――――――――――――・  |例 *J1500[CR]         |  ・――――――――――――――――・  この例は$1500をCPUのプログラム・カウンタに与えます。  $1500〜に“WICS”があれば、“WICS”が起動し、  ユーザーのプログラムがあれば、それを実行することになります。 ※Dコマンドを実行させ、[BREAK]キー でコマンド待ちにした状態で、  スクリーン・エディットを使い、メモリ内容が変更できます。  このスクリーン・エディタは、ASCIIコード を入力することもできます。  スクリーン・エディタから抜けるとき、[BREAK]キー を押します。  ・――――――――――――――――・  |例 $8000 00"ABCD"0D[CR]    |  |  $8006 C3 0000[CR]      |  ・――――――――――――――――・  この例は$8000から、$00,"A","B","C","D",$0Dを書き、  $8006より$C3,$00,$00を書きます。  このように、このスクリーン・エディタは、  メモリ書き込みコマンドの役も果します。 ・―――――――――――――――――・ |++++++++コントロール・キー++++++++| ・―――――――――――――――――・ MONITOR TS-2000では[SFT LOCK]キーを コントロール・キーとして使っています、 コントロール・キーの入力は[SFT LOCK]を押したままで、 A〜Zのキーを入力します。 コントロール・キーの内容を表にします。  コントロール・キー表 ・―――――――――――――――――――――――・ |コード|キー|  内 容 |コード|キー|  内 容 | |――+―+――――――+――+―+――――――| |00| | NUL |10|P| PRINTER ON | |01|A| ↓(DOWN) |11|Q| TAB10 | |02|B| ↑(UP) |12|R| BELL | |03|C| →(RIGHT)|13|S| SCROLL UP | |04|D| ←(LEFT) |14|T| SCROLL DOWN| |05|E| H(HOME) |15|U| TAKI ON | |06|F| C(CLR) |16|V| TAKI OFF | |07|G| DEL |17|W| CAP | |08|H| INST |18|X| | |09|I| LINECLR |19|Y| | |0A|J| ALLCLR |1A|Z| | |0B|K| WIDTH40 |1B| | BREAK | |0C|L| WIDTH80 |1C| | | |0D|M| CRLF |1D| | | |0E|N| CRLF2 |1E| | | |0F|O| PRINTER OFF|1F| | | ・―――――――――――――――――――――――・  コントロール・キー ・―――――――――――――――――――――――――――――――――――――・ |コード|キー| 内  容 |        説       明        | |――+―+――――――+―――――――――――――――――――――――――| |00| |NUL |何も行なわない。                 | |――+―+――――――+―――――――――――――――――――――――――| |01|A|↓(DOWN ) |カーソルを1行下へ移動させます。カーソルが最   | |  | | |下行にあれば、スクロール・アップします。     | |――+―+――――――+―――――――――――――――――――――――――| |02|B|↑(UP) |カーソルを1行上へ移動させます。カーソルが最   | |  | | |上行にあれば、何もしません。           | |――+―+――――――+―――――――――――――――――――――――――| |03|C|→(RIGHT) |カーソルを1桁右へ移動させます。カーソルが最   | |  | | |右桁にあれば、1行下の行の左にカーソルを     | |  | | |させます。                    | |――+―+――――――+―――――――――――――――――――――――――| |04|D|←(LEFT) |カーソルを1桁左へ移動させます。カーソルが最   | |  | | |左桁にあれば、1行上の行の最右桁にカーソルを   | |  | | |移動させます。                  | |――+―+――――――+―――――――――――――――――――――――――| |05|E|H(HOME) |カーソルをHOME位置に移助させます。        | |――+―+――――――+―――――――――――――――――――――――――| |06|F|C(CLR) |スクロール・ウィンドウ内部をクリアし、HOMEを実行します。  | |――+―+――――――+―――――――――――――――――――――――――| |07|G|DEL |カーソル位置以後の文字をすべて1桁左に移動さ   | |  | | |せ、カーソルも左へ移動させます。もし、カーソ   | |  | | |ルが最左桁にあれば、カーソルは移動しません。   | |――+―+――――――+―――――――――――――――――――――――――| |08|H|INST |カーソル以後の文字を1桁右に移動させ、カーソ   | |  | | |ル位置にスベースを書きます。           | |――+―+――――――+―――――――――――――――――――――――――| |09|I|LINE CLR |カーソル以後の文字1行分クリアします。      | |――+―+――――――+―――――――――――――――――――――――――| |0A|J|ALL CLR |スクロール・ウィンドウの有無に関係なく画面全   | |  | | |体を、クリアします。               | |――+―+――――――+―――――――――――――――――――――――――| |0B|K|WIDTH40 |40桁モードにします。クリアは行ないません。    | |――+―+――――――+―――――――――――――――――――――――――| |0C|L|WIDTH80 |80桁モードにします。クリアは行ないません。    | |――+―+――――――+―――――――――――――――――――――――――| |0D|M|CRLF |改行を行ないます。                | |――+―+――――――+―――――――――――――――――――――――――| |0E|N|CRLF2 |カーソルが最左桁以外にあれば、改行を行ないます。 | |――+―+――――――+―――――――――――――――――――――――――| |0F|O|PRINTEROFF |プリンタの出力を行なわないモードにします。    | |――+―+――――――+―――――――――――――――――――――――――| |10|P|PRINTER ON |プリンタの出力を行なうモードにします。      | |――+―+――――――+―――――――――――――――――――――――――| |11|Q|TAB10 |10桁のタブレーションを行ないます。        | |――+―+――――――+―――――――――――――――――――――――――| |12|R|BELL |ベルを鳴らします。                | |――+―+――――――+―――――――――――――――――――――――――| |13|S|SCROLL UP |スクロール・アップを行ないます。         | |――+―+――――――+―――――――――――――――――――――――――| |14|T|SCROLL DOWN |スクロール・ダウンします。            | |――+―+――――――+―――――――――――――――――――――――――| |15|U|KEY LIST  |ファンクション・キーの内容全部を表示します。   | |――+―+――――――+―――――――――――――――――――――――――| |16|V|CHR COLOR  |キャラクタ・カラーを変化させます。        | |――+―+――――――+―――――――――――――――――――――――――| |17|W|CAP     |英大文字、英小文字の切り換えを行ないます。    | |――+―+――――――+―――――――――――――――――――――――――| |18|X|BACK COLOR |バックグランド・カラーを変化させます。      | |  |Fn|      |ファンクション・キーの内容をクリアします。    | ・―――――――――――――――――――――――――――――――――――――・ ・―――――――――――――――――・ |+++++++モニタ・サブルーチン+++++++| ・―――――――――――――――――・ MONITOR TS−2000では 入出力などの最少限必要な機能は、 $0028番地をコールすることで すべて行なえるように設計されています。 $0028番地をコールするには RESTART(5)を行なうとよいわけです。 RESTART(5)はマシン語コードでは、$EFの1バイトです。 この1バイト$EFだけでは $0028〜のサブルーチンは何を行なえばよいのか分かりません。 そこで$EDの後に1バイトの入出力の機器番号を書きます。 たとえば、$EF $00 であれば、1行入力を行ない、 $EF $06は1行出力を行なうと決めておけば、 ユーザーはモニタのアドレスを覚える必要がありません。 $EFの後の1バイトの機器番号さえ覚えておけば、 マシン語でもBASEでも容易にプログラムができるわけです。 つぎに、機器番号と名称表を示します。  機器番号と名称表 ・―――――――――――――――――――――――――――――・ |00| GETLN |14| MUSIC |28| CURHL | |01| CRTOUT |15| TIMESET |29| A=[HL] | |02| PUTCHR2 |16| TIMERD |2A| [HL]=A | |03| PUTCHR |17| BELL |2B| FILELOAD | |04| PUTLN |18| TEMPO |2C| FILEPR | |05| PUTLN2 |19| PRHL |2D| WINDOWSET | |06| PUTLINE |1A| PRA |2E| BACKSEARCH | |07| CRLF |1B| RDHEX4 |2F| ZINP | |08| CRLF2 |1C| RDHEX2 |30| CURHL1 | |09| SPACE |1D| MOTOR |31|−・ | |0A| GETCH |1E| MSTOP |32| | | |OB| getch |1F| COPEN |33| | | |0C| INKEY |20| SEARCH SPACE |34| | | |OD| BREAK |21| FF |35| |ユーザー用 | |OE| FSAVE |22| REW |36| | | |0F| PSAVE |23| PR#P |37| | | |10| FLOAD |24| PR#2 |38| | | |11| PLOAD |25| SAME |39| | | |12| VERIFY |26| 2PRC |3A| | | |13| SOUND |27| 2PR |3B|−・ | ・―――――――――――――――――――――――――――――・ これらのモニタ・サブルーチンをコールして、 つぎのプログラムを書いてみましょう。 ・―――――――――――――――――――――――――――――・ |                             | | ・→INKEY(リアル・タイム・キー入力)を行ない、  | | | これを画面に出力します。[BREAK] キーが押されたら  | | | キーが押されたモニタヘ戻る。            | | ・−繰り返し                      | |    $8000にプログラムします。          | |                             | | 8000 EF0C LOOP 'INKEY;リアル・タイム・キー入力          | | 8002 EF01 'CRT OUT;CRT出力            | | 8004 EF0D 'BREAK ;[BREAK]キー・チェック      | | 8006 CAF000 'IF Z GOTO MONITOR            | | 8009 C30080 GOTO LOOP                | ・―――――――――――――――――――――――――――――・ このように表を見ながらハンド・アセンブルしただけでも、 ある程度のものをプログラムできます。 メモリ・ダンプやプリンタのピット・イメージ・プリント、 またはTOSなどもこれらのサブルーチンを使って作れます。 つぎに各サブルーチンの内容を示します。 ・―――――――――――――――――――――――――――――――――――――・ |機器| サブルーチン名 |        サブルーチンの内容          | |番号| |                           | |――+――――――+―――――――――――――――――――――――――――| |00|GETLN |キーボードから1行のデータ入力を行ないます。行バッファは、 | |  | |DEレジスタで指定します。バッファは160バイト必要です。 | |  | |TS-2000では$1380を使用しています。 | |  | |[BREAK]キーが押されたら、行バッファの先頭に$1Bが | |  | |ストアされます。DEレジスタは$C000〜$FFFFに | |  | |あってはいけません。 | |――+――――――+―――――――――――――――――――――――――――| |01|CRTOUT |Accの内容を画面に出力します。 | |  |      |Accの内容が$00〜$16のときは | |  |      |コントロール・コードになっているので、 | |  | |それぞれのコントロールが行なわれます。たとえば、 | |  | |Accこの内容が$06(C)であればクリアを実行します。 | |――+――――――+―――――――――――――――――――――――――――| |02|PUTCHR2 |Accの内容を出力装置に出力します。出力装置は$0036 | |  | |番地の値により、次の出力装置が指定されます。 | |  | | 00:CRT | |  | | 01:PRINTER | |  | | 02:PRINTER & CRT | |  | |となっています。CRT出力はコントロールを行なわず、 | |  | |キャラクタを出力します。たとえば、Accが$01であれば、 | |  | |画面に[↓]のキャラクタが出力されます。 | |――+――――――+―――――――――――――――――――――――――――| |03|PUTCHR |Accの内容を出力装置に出力します。出力装置は | |  | |PUTCHR2と同じです。ただし、CRT出力はコントロール・ | |  | |コードがあればコントロールを行ないます(CRTOUTと同様)。 | |――+――――――+―――――――――――――――――――――――――――| |04|PUTLN |DEレジスタの指すアドレスから始まるASCIIコード | |  | |列を続けて画面に出力します。データのエンド・マークは | |  | |$0D(キャリッジ・リターン)です。 | |  | |ただし、キャリッジ・リターンは行ないません。 | |  | |コントロール・コードは実行されます。 | |――+――――――+―――――――――――――――――――――――――――| |05|PUTLN2 |DEレジスタの指すアドレスから始まるASCIIコード列を | |  | |続けて出力装置に出力します(PUTCHR2参照)。 | |  | |CRT出力はコントロールを行なわず、キャラクタを | |  | |出力します。エンド・マークは$0DでPUTLNと同様です。 | |――+――――――+―――――――――――――――――――――――――――| |06|PUTLINE |PUTLN2と同様ですが、コントロール・コードはコントロールを実行します。 | |――+――――――+―――――――――――――――――――――――――――| |07|CRLF |改行を出力装置に出力します。 | |――+――――――+―――――――――――――――――――――――――――| |08|CRLF2 |改行をCRTのみに出力します。このときカーソルが | |  | |最左桁にあれば、改行は行なわれません。 | |――+――――――+―――――――――――――――――――――――――――| |09|SPACE |スペースを出力装置に出力します。 | |――+――――――+―――――――――――――――――――――――――――| |0A|GETCH |キーボードより1文字キー入力を行ない、そのASCII | |  | |コードをAccに入れます。このときカーソルを点滅さ | |  | |せます(リピートなし)。 | |――+――――――+―――――――――――――――――――――――――――| |0B|getch |キーボードより1文字キー入力を行ない、そのASCII | |  | |コードをAccに入れます。このときカーソルを点滅さ | |  | |せます(リピートあり)。 | |――+――――――+―――――――――――――――――――――――――――| |0C|INKEY |リアル・タイム・キー入力を行ない、そのASCIIコードを | |  | |Accに入れます。 | |09|SPACE |スペースを出力装置に出力します。 | |――+――――――+―――――――――――――――――――――――――――| |0A|GETCH |キーボードより1文字キー入力を行ない、そのASCII | |  | |コードをAccに入れます。このときカーソルを点滅さ | |  | |せます(リピートなし)。 | |――+――――――+―――――――――――――――――――――――――――| |0B|getch |キーボードより1文字キー入力を行ない、そのASCII | |  | |コードをAccに入れます。このときカーソルを点滅さ | |  | |せます(リピートあり)。 | |――+――――――+―――――――――――――――――――――――――――| |0C|INKEY |リアル・タイム・キー入力を行ない、そのASCIIコードを | |  | |Accに入れます。 | |――+――――――+―――――――――――――――――――――――――――| |0D|BREAK |[BREAK]キーが押されているか、チェックします。 | |  | |Zフラグ←0:押されていない。 | |  | |Zフラグ←1:押されている。 | |――+――――――+―――――――――――――――――――――――――――| |0E|FSAVE |FILE DATAブロックをカセットにセーブします。 | |  | |FILE DATAの仕様 | |  | | $1300    :ファイルタイプ :FILE | |  | | $1301〜$1310:ファイルネーム :FILE NAME | |  | | $1311    :$0D   :FILECR | |  | | $1312〜$1313:長さ   :LENGT | |  | | $1314〜$1315:先頭アドレス:START | |  | | $1316〜$1317:実行アドレス:EXT | |  | | $1318〜$137F:未使用 | |  | |このエリアをカセットにセーブします。これらのデータは | |  | |PLOAD、PSAVEで使用されます。 | |09|SPACE |スペースを出力装置に出力します。 | |――+――――――+―――――――――――――――――――――――――――| |0A|GETCH |キーボードより1文字キー入力を行ない、そのASCII | |  | |コードをAccに入れます。このときカーソルを点滅さ | |  | |せます(リピートなし)。 | |――+――――――+―――――――――――――――――――――――――――| |0B|getch |キーボードより1文字キー入力を行ない、そのASCII | |  | |コードをAccに入れます。このときカーソルを点滅さ | |  | |せます(リピートあり)。 | |――+――――――+―――――――――――――――――――――――――――| |0C|INKEY |リアル・タイム・キー入力を行ない、そのASCIIコードを | |  | |Accに入れます。 | |――+――――――+―――――――――――――――――――――――――――| |0D|BREAK |[BREAK]キーが押されているか、チェックします。 | |  | |Zフラグ←0:押されていない。 | |  | |Zフラグ←1:押されている。 | |――+――――――+―――――――――――――――――――――――――――| |0E|FSAVE |FILE DATAブロックをカセットにセーブします。 | |  | |FILE DATAの仕様 | |  | | $1300    :ファイルタイプ :FILE | |  | | $1301〜$1310:ファイルネーム :FILE NAME | |  | | $1311    :$0D   :FILECR | |  | | $1312〜$1313:長さ   :LENGT | |  | | $1314〜$1315:先頭アドレス:START | |  | | $1316〜$1317:実行アドレス:EXT | |  | | $1318〜$137F:未使用 | |  | |このエリアをカセットにセーブします。これらのデータは | |  | |PLOAD、PSAVEで使用されます。 | |――+――――――+―――――――――――――――――――――――――――| |0F|PSAVE |FILE DATAブロックの内容に従い、プログラムおよび | |  | |データをカセットにセーブします。 | |――+――――――+―――――――――――――――――――――――――――| |10|FLOAD |FILE DATAブロックにカセットからロードします。 | |  | |これはFSAVEにより、作られたものに限られます | |  | |(PSAVEのファイルはロードしません)。 | |――+――――――+―――――――――――――――――――――――――――| |11|PLOAD |FILE DATAブロックの内容に従い、プログラムおよび | |  | |データをカセットからロードします(PSAVEのファイルのみ)。 | |――+――――――+―――――――――――――――――――――――――――| |12|VERIFY |FILE DATAブロックの内容に従い、メモリ上のデータと | |  | |とカセット上のデータを比較します。 | |  | |CYフラグ←1:一致しなかった。 | |  | |CYフラグ←0:一致した。 | |――+――――――+―――――――――――――――――――――――――――| |13|SOUND |BCレジスタを音長、HLレジスタを音程と見なして | |  | |音を出力します。 | |――+――――――+―――――――――――――――――――――――――――| |14|MUSIC |DEレジスタの指すアドレスよりはじまる音楽データ | |  | |を演奏します。音楽データは"BASIC LANGUAGE MANUAL"の | |  |      |MUSICステートメントに解説してある | |  | |データと同様です。エンド・マークは$0Dか、$2A:"*" | |  | |でなければなりません。 | |――+――――――+―――――――――――――――――――――――――――| |15|TIMESET |内蔵時計に時刻をセットします。 | |  | | Aレジスタ←0:AM | |  | | 1:PM | |  | |DEレジスタ←秒単位の時間(2バイト・データ) | |  | |がセットされます。 | |――+――――――+―――――――――――――――――――――――――――| |16|TIMERD |内蔵時計の現在の時刻を読み取ります。 | |  | | Aレジスタ←0:AM | |  | | 1:PM | |  | |DEレジスタ←秒単位の時間(2バイト・データ) | |  | |がセットされます。 | |――+――――――+―――――――――――――――――――――――――――| |17|BELL |ベルを鳴らします。 | |――+――――――+―――――――――――――――――――――――――――| |18|TEMPO |MUSICサブルーチンの演奏するテンポを設定します。 | |  | |Accにテンポ・データを入れておきます。 | |――+――――――+―――――――――――――――――――――――――――| |19|PRHL |HLレジスタの値を16進数で出力装置に出力します。 | |――+――――――+―――――――――――――――――――――――――――| |1A|PRA |Aレジスタの値を16進数で出力装置に出力します。 | |――+――――――+―――――――――――――――――――――――――――| |1B|RDHEX4 |連続した4バイトのデータが4桁の16進数を表現する | |  | |ASCIIコード列であれば、その16進数をHLレジスタ | |  | |にセットします。 | |  | |DEレジスタ←連続した4バイト・データの先頭アドレス。 | |  | |リターン時にDEは、4増加されています。 | |  | |CYフラグが1であれば、データ・エラーが発生し | |  | |たことになります。 | |――+――――――+―――――――――――――――――――――――――――| |1C|RDHEX2 |連続した2バイトのデータが2桁の16進数を表現する、 | |  | |ASCIIコード列であれば、その16進数をAレジスタに | |  | |セットします。 | |  | | DEレジスタ←連続した2バイト・データの先頭アドレス。 | |  | |   リターン時にDEは、2増加されています。 | |  | | CYフラグが1であればデータ・エラーが発生した | |  | | ことになります。 | |――+――――――+―――――――――――――――――――――――――――| |1D|MOTOR |カセットのモータを回します。Dレジスタの内容により | |  | |次の動作をします。 | |  | | $01または$02:WRITE | |  | | $04または$08:READ | |――+――――――+―――――――――――――――――――――――――――| |1E|MSTOP |カセットのモータを止めます。 | |――+――――――+―――――――――――――――――――――――――――| |1F|COPEN |カセットのフタを開けます。 | |――+――――――+―――――――――――――――――――――――――――| |20|SEARCH |カセットテープのデータの区切り(スペース)までテープを | |  |SPACE |進めます。 | |――+――――――+―――――――――――――――――――――――――――| |21|FF |カセットの早送りをします。 | |――+――――――+―――――――――――――――――――――――――――| |22|REW |カセットの巻戻しを行ないます。 | |――+――――――+―――――――――――――――――――――――――――| |23|PR#P |AレジスタのASCIIコードを プリンタに出力します。       | |  | |$0Dは$0Aに変換されて出力されます。 | |――+――――――+―――――――――――――――――――――――――――| |24|PR#2 |Aレジスタの値をそのままプリンタに出力します。 | |  | |ビット・イメージ・プリントのときに使用できます。 | |――+――――――+―――――――――――――――――――――――――――| |25|SAME |DEレジスタのデータとHLレジスタのデータをB個 | |  | |分比較します。 | |  | | Zフラグ←1:一致した。 | |  | | Zフラグ←0:一致しなかった。 | |――+――――――+―――――――――――――――――――――――――――| |26|ZPRC |CRLF2を実行し、この命令の書かれている次のアドレス | |  | |より、$00までのデータをCRTに出力します。 | |  | | [例 EF46 41 42 43 00] | |  | |これは、"ABC" を出力します。   | |  | |$00のデータの次のアドレスにリターンしてきます。 | |  | |※エラー表示などに使います。 | |――+――――――+―――――――――――――――――――――――――――| |27|ZPR |この命令の書かれている次のアドレスより、 | |  | |$00までのデータを出力装置に出力します。 | |  | | [例 EF27 45 4F 44 00] | |  | |これは、"END" をプリンタなどに出力します。   | |  | |$00のデータの次のアドレスヘリターンしてきます。 | |  | |PRINT文 のように使用できます。   | |――+――――――+―――――――――――――――――――――――――――| |28|CURHL |現在のカーソル位置をHLレジスタにセットします。 | |  | |$D000〜$D7CFが値となります。  | |――+――――――+―――――――――――――――――――――――――――| |29|A=[HL] |AレジスタにHLの指すメモリの内容をセットします。 | |  | |このとき、HLレジスタが$C000〜$FFFFであれば、 | |  | |VRAMの内容になります。                | |――+――――――+―――――――――――――――――――――――――――| |2A|[HL]=A |A=[HL]の逆動作をします。               | |――+――――――+―――――――――――――――――――――――――――| |2B|FILELOAD |DEレジスタにファイル・ネームの先頭アドレスをセットして、 | |  | |コールすると、そのファイル・ネームを探して | |  | |リターンします。 | |  | |DEレジスタの先頭が$0Dであれば,先頭のファイルを | |  | |見つけるとリターンします。DEレジスタは$1300 | |  | |〜$1380の間にあってはいけません。 | |――+――――――+―――――――――――――――――――――――――――| |2C|FILEPR |ファイル・ネームをCRTに出力します。 | |――+――――――+―――――――――――――――――――――――――――| |2D|WINDOWSET |$000Bにスクロール開始行。 | |  | |$000Cにスクロール終了行+1をセットして、 | |  | |このサブルーチンをコールするとスクロール・ウィンドウが | |  | |セットされます。 | |――+――――――+―――――――――――――――――――――――――――| |2E|BACK SEARCH |カセットを巻戻しながら、スペース・サーチを行ないます。 | |――+――――――+―――――――――――――――――――――――――――| |2F|ZINP |ZPRと同様に$00までのデータを出力した後、        | | | |1行入力を行ないます。バッファは$1380を指定していて、   | | | |キー入力による文字列の先頭アドレスをDEレジスタに入れて    | | | |リターンします。[BREAK]キーが押された            | | | |場合には$1380番地に$1Bがストアされます。        | |――+――――――+―――――――――――――――――――――――――――| |30|CURHL1 |カーソルのX座標をLレジスタに、Y座標をHレジスタ にセットして | | | |コールすると、HLレジスタにアドレスが返ってきます。        | |――+――――――+―――――――――――――――――――――――――――| |31|      |ユーザーが定義できます。 | || |      | | ・―――――――――――――――――――――――――――――――――――――・   次に、主なワーク・エリアを示します。   主なワーク・エリア ・―――――――――――――――――・ |0003 | カーソルX | |0004 | カーソルY | MONITORのスタート・アドレス |000B | ウィンドウ先頭行 | コールド・スタート |000D,E | スクロール長 | :$0000 |0013 | 1行の桁数-1 | ホット・スタート |0036 | 出力機器番号 | :$00F0 |12C3〜12FF | スタック・エリア | |1300〜137F | FILE DATA ブロック | |1380〜141F | 行入力バッファ | |1430〜145F | 第2スタック・エリア | |1460〜14FF | ファンクション・キーDATA | ・―――――――――――――――――・ ・―――――――――――――――――・ |+++++++++モニタの入力方法+++++++++| ・―――――――――――――――――・ BASICのモニタを使って、$8000〜に入力します。 これをSコマンドでセーブし、 IPLからロードすると、このモニタが走ります。 ・―――――――――――――――――・ |+++++++++++++終わりに+++++++++++++| ・―――――――――――――――――・ 今回の発表記事はI/O’82年2月号 “MONITOR TS-1000”のものと大幅にだぶっています。 しかし、TS−1000の発表はMZ−2000の発売以前のことですし、 MZ−2000ユーザーのみなさんに対してはすべて初めから ご説明したほうがよいと思います。 ですから今後の“SUPER BASE”、“COLOR WICS”の発表も 以前の記事と重なることが多々あることかと思います。 以前の記事をお読みくださったみなさんには申しわけありませんが、 よろしくお願いいたします。